from django.shortcuts import render
from itsdangerous import serializer
from rest_framework.response import Response
from rest_framework.serializers import Serializer
# Create your views here.
from rest_framework.views import APIView

from api.models import Employee
from .serializers import EmpSerializer,DeEmpSerializer  #导入自定义的序列化类

class EmployeeAVIView(APIView):
    def get(self,request,*args,**kwargs):
        id=kwargs.get('id')
        print('这是api中获取到的id')
        print(id)
        if id:
            try:
                one_id=Employee.objects.filter(id=id)[0]
                #查询到的数据无法直接序列化,需要使用序列化类来完成序列化( 我们上面定义的序列化类导入一下 )
                one_id=EmpSerializer(one_id).data
                return Response({
                    "status":200,
                    "msg":"查询单个数据成功",
                    "result":one_id
                })
            except:
                return Response({
                    "status": 500,
                    "msg": "查询单个数据失败",
                })
        else:
            #查询所有
            all_id=Employee.objects.all()
            #使用序列化器完成多个员工的序列化,需要制定many=True
            all_id=EmpSerializer(all_id,many=True).data
            return Response({
                "status": 200,
                "msg": "查询全部数据成功",
                "result":list(all_id)
            })

    def post(self,request,*args,**kwargs):
        user=request.data
        print(user)
        if not isinstance(user,dict) or user=={}:
            return Response({
                "status": 501,
                "message": "新增失败",
            })

        #使用序列乎其对前台提交的数据进行反序列化
        #在反序列化的时候需要制定关键字参数data
        post_user=DeEmpSerializer(data=user)
        print(post_user)
        #使用is_valid()对序列化的数据进行校验,校验合法返回True
        print(post_user.is_valid())
        if post_user.is_valid():
            post_save=post_user.save()  #进行存储
            #调用save()去存储对象必须重写create方法
            return Response({
                "status":200,
                "message":"存储成功",
                "result":EmpSerializer(post_save).data
            })
        return Response({
            "status":500,
            "message":"存储失败",
            #错误信息包含在errors里面,会出现提示信息
            "result":post_user.errors
        })

